#pragma once
#include <iostream>
#include <string>

// void

// 将报文封装成数据包
bool Package(const std::string &msg, std::string *result)
{
	int len = msg.size();
	*result = "$" + std::to_string(len) + "$" + msg;
	return true;
}

// 将数据包解包获取一个完整的独立的报文
// $len${ json }
bool Unpackage(std::string &msg, std::string *result)
{
	int left_pos = msg.find('$');
	if (left_pos != 0)
		return false;

	int right_pos = msg.find('$', left_pos + 1);
	if (right_pos == std::string::npos)
		return false;

	for (int i = left_pos + 1; i < right_pos; i++)
	{
		if (!(msg[i] >= '0' && msg[i] <= '9'))
		{
			return false;
		}
	}

	int len = std::stoi(msg.substr(left_pos + 1, right_pos));
	if (len + right_pos > msg.size())
		return false;
	*result = msg.substr(right_pos + 1, len - 1);

	msg.erase(0, right_pos + len + 1);
	return true;
}